<HTML> <HEAD> <TITLE>Groovy Color Thing III</TITLE> <SCRIPT LANGUAGE="JavaScript1.2"><!-- var tiles; var intervalID = 0; var seq; var seqIndex = 0; function SetupSequence() { seq = new Array(26); seq[0] = "000000000000000000000000000001000000000000000000000000000001000000000000000000000000000001000000000000000000000000000001000000000000000000000000000001"; seq[1] = "000000000000000000000000000010000000000000000000000000000010000000000000000000000000000011000000000000000000000000000010000000000000000000000000000010"; seq[2] = "000000000000000000000000000100000000000000000000000000000100000000000000000000000000000111000000000000000000000000000100000000000000000000000000000100"; seq[3] = "000000000000000000000000001001000000000000000000000000001001000000000000000000000000001111000000000000000000000000001001000000000000000000000000001001"; seq[4] = "000000000000000000000000010010000000000000000000000000010010000000000000000000000000011110000000000000000000000000010010000000000000000000000000010010"; seq[5] = "000000000000000000000000100101000000000000000000000000100101000000000000000000000000111101000000000000000000000000100101000000000000000000000000100101"; seq[6] = "000000000000000000000001001011000000000000000000000001001010000000000000000000000001111011000000000000000000000001001010000000000000000000000001001011"; seq[7] = "000000000000000000000010010111000000000000000000000010010100000000000000000000000011110111000000000000000000000010010100000000000000000000000010010111"; seq[8] = "000000000000000000000100101111000000000000000000000100101000000000000000000000000111101111000000000000000000000100101000000000000000000000000100101111"; seq[9] = "000000000000000000001001011110000000000000000000001001010000000000000000000000001111011110000000000000000000001001010000000000000000000000001001011110"; seq[10]= "000000000000000000010010111101000000000000000000010010100001000000000000000000011110111101000000000000000000010010100001000000000000000000010010111101"; seq[11]= "000000000000000000100101111010000000000000000000100101000010000000000000000000111101111010000000000000000000100101000010000000000000000000100101111011"; seq[12]= "000000000000000001001011110100000000000000000001001010000100000000000000000001111011110100000000000000000001001010000100000000000000000001001011110111"; seq[13]= "000000000000000010010111101000000000000000000010010100001000000000000000000011110111101000000000000000000010010100001000000000000000000010010111101111"; seq[14]= "000000000000000100101111010000000000000000000100101000010000000000000000000111101111010000000000000000000100101000010000000000000000000100101111011110"; seq[15]= "000000000000001001011110100001000000000000001001010000100001000000000000001111011110100001000000000000001001010000100001000000000000001001011110111101"; seq[16]= "000000000000010010111101000010000000000000010010100001000010000000000000011110111101000010000000000000010010100001000010000000000000010010111101111011"; seq[17]= "000000000000100101111010000100000000000000100101000010000100000000000000111101111010000100000000000000100101000010000100000000000000100101111011110111"; seq[18]= "000000000001001011110100001000000000000001001010000100001000000000000001111011110100001000000000000001001010000100001000000000000001001011110111101111"; seq[19]= "000000000010010111101000010000000000000010010100001000010000000000000011110111101000010000000000000010010100001000010000000000000010010111101111011110"; seq[20]= "000000000100101111010000100000000000000100101000010000100001000000000111101111010000100001000000000100101000010000100001000000000100101111011110111100"; seq[21]= "000000001001011110100001000001000000001001010000100001000010000000001111011110100001000010000000001001010000100001000010000000001001011110111101111001"; seq[22]= "000000010010111101000010000011000000010010100001000010000100000000011110111101000010000100000000010010100001000010000100000000010010111101111011110011"; seq[23]= "000000100101111010000100000110000000100101000010000100001001000000111101111010000100001001000000100101000010000100001001000000100101111011110111100110"; seq[24]= "000001001011110100001000001100000001001010000100001000010010000001111011110100001000010010000001001010000100001000010010000001001011110111101111001100" seq[25]= "000010010111101000010000011000000010010100001000010000100100000011110111101000010000100100000010010100001000010000100100000010010111101111011110011000"; } function Animate() { var s = seq[seqIndex++]; var j = 1; if(seqIndex >= seq.length) seqIndex = 0; for(var i = 0; i < s.length;i++) { document.images[j++].src = tiles[s.charAt(i)].src; } } function Setup() { tiles = new Array(6); for(var i = 0; i < 6; i++) tiles[i] = new Image(16,16); tiles[0].src = "../GRAFX/ANIM/BLACK.GIF"; tiles[1].src = "../GRAFX/ANIM/YELLOW.GIF"; // tiles[2].src = "../GRAFX/ANIM/RED.GIF"; // tiles[3].src = "../GRAFX/ANIM/YELLOW.GIF"; // tiles[4].src = "../GRAFX/ANIM/GREEN.GIF"; // tiles[5].src = "../GRAFX/ANIM/GRAY.GIF"; SetupSequence(); } function StartSign() { intervalID = setInterval("Animate()",250); } function StopSign() { if(intervalID) { clearInterval(intervalID); intervalID = 0; } } //--> </SCRIPT> </HEAD> <BODY onLoad="Setup()" onUnload="StopSign()"> <FONT COLOR="007777"><H1><IMG SRC="../GRAFX/UTENS.JPG" WIDTH=80 HEIGHT=50 ALIGN = LEFT>Groovy Animated Sign</H1></FONT> <BLOCKQUOTE><FONT COLOR="770000"> This recipe creates an animated sign, like you see advertising motel rates and gas prices on the interstate. (JavaScript 1.2 only!)<p> </FONT> <SCRIPT LANGUAGE="JavaScript1.2"> for(var row=0; row < 5;row++) { for(var col=0; col<30;col++) { document.write('<IMG SRC="../GRAFX/ANIM/BLACK.GIF" WIDTH=16 HEIGHT=16 BORDER=0>'); } document.writeln('<BR>'); } </SCRIPT> <FORM><INPUT TYPE="button" VALUE="Start the sign" onClick="StartSign()"> <INPUT TYPE="button" VALUE="Stop the sign" onClick="StopSign()"></FORM> <FONT COLOR="007777"><H2>Discussion</H2></FONT> <FONT SIZE=4> This applet works by caching some images and then manipulating the <FONT FACE="Arial,Helvetica" COLOR="#007777">document.images[]</FONT> array. A recurring timer event triggers each update of the sign. The 150-position layout of each sign update is stored in an array, and a function walks through it, assigning new <KBD><B>src</B></KBD> property values to the elements in the image array: <FONT COLOR="#770000" SIZE=3><PRE> function Animate() { var s = seq[seqIndex++]; var j = 1; if(seqIndex >= seq.length) seqIndex = 0; for(var i = 0; i < s.length;i++) { document.images[j++].src = tiles[s.charAt(i)].src; } }</PRE></FONT> </FONT> <BR><BR><h5>Copyright ©1998 by Charles River Media, All Rights Reserved</h5> </BODY> </HTML>